package com.rlyy.basic.resolver.valid;

import com.rlyy.common.exception.ParameterValidException;
import com.rlyy.common.param.RequestWrapper;
import com.rlyy.basic.resolver.valid.annotation.EnableFastFail;
import org.springframework.web.method.HandlerMethod;

/**
 * 参数校验
 *
 * @author yuanqinglong
 * @since 2021/2/24 10:37
 */
public interface IMyValidatedPostProcessor {


    /**
     * 判断参数类型执行那种校验逻辑
     * 1.参数是实体类和基本数据类型校验逻辑不同
     *
     * @param requestWrapper 参数
     * @return true执行校验 false不执行校验
     */
    boolean supportsValid(RequestWrapper requestWrapper);


    /**
     * 校验参数
     *
     * @param requestWrapper 请求参数、执行方法信息
     * @throws ParameterValidException 异常信息
     */
    void validate(RequestWrapper requestWrapper) throws ParameterValidException;


    /**
     * 判断是否启用快速失败校验
     *
     * @param handlerMethod 请求方法
     * @return true 启用、false 不启用
     */
    default boolean enableFastFail(HandlerMethod handlerMethod) {
        return handlerMethod.hasMethodAnnotation(EnableFastFail.class) || handlerMethod.getBeanType().isAnnotationPresent(EnableFastFail.class);
    }
}
